package com.kepler.social.domain.user.security.rules;

import com.kepler.social.common.constants.Enums;
import com.kepler.social.common.constants.TipsConst;
import com.kepler.social.common.utils.ValidateAssert;

public class MailRule {


    /**
     * 这里其实不需要设置过期时间，当时考虑的场景比较极端，是用户点击发送注册邮件，然后又点击重置密码。但是漏掉了1个情况，即用户会点击多次发送，此时
     * 创建时间不能真实的反应验证过期时间。从用户体验的角度上，提示用户去点击已经发送的验证邮件，体验确实会好点，但是太细了，成本有点大。换成未验证
     * 提示不存在，用户可以选择重新发送注册验证邮件，也不会对体验又什么降低，毕竟这只是一次性功能。
     * 如果要做，应校验redis中的数据，因为上边提到，创建时间不能正确反应过期时限。
     *
     * @param state
     * @param timeToCurrent
     * @param expireTime
     */
    @Deprecated
    public static void mailInUse(Integer state, Long timeToCurrent, Long expireTime){
        // 未认证且超过了认证时限，那么就等同于未不存在
        ValidateAssert.isTrue(state != Enums.UserEmailStateEnum.NOT_VERIFIED.getCode()
                        || timeToCurrent < expireTime,
                TipsConst.email_not_exists);
        // 未认证且超过了认证时限，那么就等同于未不存在
        ValidateAssert.isTrue(state != Enums.UserEmailStateEnum.NOT_VERIFIED.getCode()
                        || timeToCurrent >= expireTime,
                TipsConst.email_to_be_verified);
        ValidateAssert.isTrue(state != Enums.UserEmailStateEnum.DISUSED.getCode(),
                TipsConst.email_disused);
    }

}
